package br.com.toscano.contpedido.business;

import java.util.Date;
import java.util.List;

import javax.inject.Inject;

import br.gov.frameworkdemoiselle.stereotype.BusinessController;
import br.gov.frameworkdemoiselle.template.DelegateCrud;
import br.gov.frameworkdemoiselle.transaction.Transactional;

import br.com.toscano.contpedido.domain.Pedido;
import br.com.toscano.contpedido.domain.Recebimento;
import br.com.toscano.contpedido.domain.StatusPedido;
import br.com.toscano.contpedido.persistence.RecebimentoDAO;

@BusinessController
public class RecebimentoBC extends DelegateCrud<Recebimento, Long, RecebimentoDAO> {
	
	private static final long serialVersionUID = 1L;

	@Inject
	private PedidoBC pedidoBC;
	
	public List<Recebimento> consultarRecebimento(Long idCliente, Long idUsuario, Date dataRecebimentoInicial, Date dataRecebimentoFinal, Boolean conferido) {
		List<Recebimento> retorno = this.getDelegate().consultarRecebimento(idCliente, idUsuario, dataRecebimentoInicial, dataRecebimentoFinal,conferido);
		return retorno;
	}	
	@Override
	public Recebimento insert(Recebimento r){
		this.getDelegate().insert(r);

		for (Pedido p : r.getListaPedido()) {
			pedidoBC.registrarPagamento(p.getId());
		}
		
		return r;
	}

	@Override
	public Recebimento update(Recebimento r){

		pedidoBC.cancelarPagamento(r.getId());

		for (Pedido p : r.getListaPedido()) {
			pedidoBC.registrarPagamento(p.getId());
		}

		this.getDelegate().update(r);

		return r;
	}

	@Transactional
	public void conferido(Long id) {
		Recebimento recebimento = this.load(id);
		for (Pedido pedido : recebimento.getListaPedido() ) {
			pedidoBC.registrarConferido(pedido.getId());
		}
		recebimento = this.load(id);
		recebimento.setConferido(true);
		this.update(recebimento);
	}
	
	@Override
	@Transactional
	public void delete(Long id) {

		Recebimento recebimento = this.load(id);
		for (Pedido pedido : recebimento.getListaPedido() ) {
			StatusPedido sp = new StatusPedido();
			sp.setId(StatusPedido.ENTREGUE);
			pedido.setStatusPedido(sp);
			pedidoBC.update(pedido);
		}
		
		super.delete(id);
	}

	@Override
	@Transactional
	public void delete(List<Long> ids) {
		// TODO Auto-generated method stub
		for (Long id : ids) {
			this.delete(id);
		}
	}

	
}
